package com.ydj.framework.protocol;

import com.baomidou.mybatisplus.core.enums.IEnum;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ydj.framework.config.JsonConfig;

import java.util.Locale;

@JsonSerialize(using = JsonConfig.BaseEnumSerializer.class)
@JsonDeserialize(using = JsonConfig.BaseEnumDeSerializer.class)
public interface BaseEnum extends IEnum<Integer> {

    // 协议里的名字。一般是英文
    String getProtocolName();

    // 生成swagger openapi显示的描述。一般是中文
    String getDesc();

    /**
     * 根据文字获取自身的枚举
     */
    static <T extends BaseEnum> T getByText(T[] enums, String text) {
        if (text == null || enums.length <= 0) {
            return null;
        }
        for (T e : enums) {
            if (e.getProtocolName().toLowerCase(Locale.ROOT).equals(text.toLowerCase(Locale.ROOT))) {
                return e;
            }
        }
        return null;
    }

    static <T extends BaseEnum> T getByCode(T[] enums, Integer code) {
        if (code == null || enums.length <= 0) {
            return null;
        }
        for (T e : enums) {
            if (e.getValue().equals(code)) {
                return e;
            }
        }
        return null;
    }
}